/**
 * 所有请求均统一传递2个参数值(请求地址,请求参数)
 * GET传递拼接好的参数
 * Post传递数组key-value值,回调函数
 */
import qs from 'qs';
function parseJSON(response) {
  return response.json();
}

function checkStatus(response) {
  if (response.status >= 200 && response.status < 500) {
    return response;
  };

  const error = new Error(response.statusText);
  error.response = response;
  throw error;
}
/*
 *   普通Post方式请求
 */
export function apiPost(api_url, params) {
  const textBody = qs.stringify(params);
  const fetchOptions = {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: textBody
  };
  return fetch(api_url, fetchOptions)
    .then(checkStatus)
    .then(parseJSON)
    .then((data) => ({ data }))
    .catch((error) => ({ error }));
}

/*
 *  普通Get方式请求
 */
export function apiGet(api_url, params) {
  const textBody = qs.stringify(params);
  const full_api = api_url + '?' + textBody;
  const fetchOptions = {
    method: 'GET',
    mode: 'cors',
    cache: 'default',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  };
  return fetch(full_api, fetchOptions)
    .then(checkStatus)
    .then(parseJSON)
    .then((data) => ({ data }))
    .catch((error) => ({ error }));
}

/*
 *  普通Put方式请求
 */
export function apiPut(api_url, params) {
  const textBody = qs.stringify(params);
  const fetchOptions = {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: textBody
  };
  return fetch(api_url + '/' + params.id, fetchOptions)
    .then(checkStatus)
    .then(parseJSON)
    .then((data) => ({ data }))
    .catch((error) => ({ error }));
}
/* 
 *  普通Delete方式请求
 */
export function apiDelete(api_url, params) {
  const textBody = qs.stringify(params);
  const fetchOptions = {
    method: 'DELETE',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: textBody
  };
  return fetch(params.id ? api_url + '/' + params.id : api_url, fetchOptions)
    .then(checkStatus)
    .then(parseJSON)
    .then((data) => ({ data }))
    .catch((error) => ({ error }));
}
/* 
 *  特殊Delete方式请求
 */
export function apiDelete1(api_url, params) {
  const textBody = qs.stringify(params);
  const fetchOptions = {
    method: 'DELETE',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: textBody
  };
  console.log('apiDelete1请求', api_url);
  return fetch(api_url, fetchOptions)
    .then(checkStatus)
    .then(parseJSON)
    .then((data) => ({ data }))
    .catch((error) => ({ error }));
}
/*
 *  上传图片
 */
export function apiPostPic(url, images, params, success, fail, error) {
  let formData = new FormData();
  for (let key in params) { formData.append(key, params[key]); };
  if (images) {
    for (let i = 0; i < images.length; i++) {
      let uri = images[i].uri;
      var date = new Date();
      let name = date.getTime() + '.png';//用时间戳保证名字的唯一性
      let file = { uri: uri, type: 'multipart/form-data', name: name };
      images[i].changeAvatar ? formData.append('upFiles', file) : formData.append('upFiles' + (i + 1), file);

    };
  };
  let fetchOptions = {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'multipart/form-data'
    },
    body: formData
  };
  return fetch(url, fetchOptions)
    .then(response => {
      if (!response.ok) { return response; };
      return response.json();
    }).then(responseJson => { // 拿到上面的转好的json
      if (responseJson.status && responseJson.status != 200) {
        fail && fail(responseJson)//可以处理返回的错误信息
      }
      if (responseJson.returnResult.code == '00000') { // 200为请求成功
        //global.consoleLog && console.log("ce");
        success && success(responseJson)
      } else {
        //global.consoleLog && console.log("失败1");
        fail && fail(responseJson)//可以处理返回的错误信息
      }
    }).catch(e => {
      error && error(error)
    });
}
// /*
//  *  上传图片
//  */
// export function apiPostPic(api_url, params) {
//   let formData = new FormData();
//   formData.append('access_token', params.access_token);
//   formData.append('file', { uri: params.file, type: 'multipart/form-data', name: 'image.jpg' });   //这里的files就是后台需要的key
//   const fetchOptions = {
//     method: 'POST',
//     headers: {
//       'Accept': 'application/json',
//     },
//     body: formData
//   };

//   return fetch(api_url, fetchOptions)
//     .then(checkStatus)
//     .then(parseJSON)
//     .then((data) => ({ data }))
//     .catch((error) => ({ error }));
// }
// /*
//  *  上传视频
//  */
// export function apiPostVideo(api_url, params) {
//   console.log(['视频', api_url, params])
//   let formData = new FormData();
//   formData.append('access_token', params.access_token);
//   formData.append('file', { uri: params.file, type: 'multipart/form-data', name: 'video.mp4' });   //这里的files就是后台需要的key
//   const fetchOptions = {
//     method: 'POST',
//     headers: {
//       'Accept': 'application/json',
//     },
//     body: formData
//   };

//   return fetch(api_url, fetchOptions)
//     .then(checkStatus)
//     .then(parseJSON)
//     .then((data) => ({ data }))
//     .catch((error) => ({ error }));
// }
// /*
//  *   实名认证
//  */
// export function apiIdjurge(api_url, params) {
//   const textBody = JSON.stringify(params);
//   const fetchOptions = {
//     method: 'POST',
//     headers: {
//       'Content-Type': 'application/x-www-form-urlencoded',
//       'Accept': 'application/json',
//       'Authorization': 'APPCODE 34cc03cdeb1b4984b5f21136204a7a89'
//     },
//     body: textBody
//   };
//   return fetch(api_url, fetchOptions)
//     .then(checkStatus)
//     .then(parseJSON)
//     .then((data) => ({ data }))
//     .catch((error) => ({ error }));
// }